home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 60750 / 60750.xpi / chrome / chromeFiles / content / btServiceUtilities.js < prev    next >
Text File  |  2010-01-20  |  13KB  |  357 lines

  1. function finalUIStartup(brandObject) {
  2.   this.installXPIs(brandObject);
  3. }
  4. function profileAfterChange(brandObject) {
  5.   /* If we are switching to big boom, set the theme to classic */
  6.   try {
  7.     if (gPrefBranch.getBoolPref("extensions.brandthunder.bigBoom") == true) {
  8.       gPrefBranch.setCharPref("general.skins.selectedSkin", "classic/1.0");
  9.     }
  10.   } catch (ex) {}
  11. }
  12. function  profileBeforeChange(brandObject) {
  13.   var skinSwitchPending = gPrefBranch.getBoolPref("extensions.dss.switchPending");
  14.     if (skinSwitchPending) {
  15.       gPrefBranch.setBoolPref("extensions.brandthunder.bigBoom", false);
  16.   }
  17.   try {
  18.     gPrefBranch.clearUserPref("general.useragent.extra.brandthunder");
  19.   } catch (ex) {}
  20.   try {
  21.     /* Don't clear the keywordURL pref if we weren't the ones who set it */
  22.     var keywordURL = gPrefBranch.getCharPref("keyword.URL");
  23.     if (keywordURL.match("chrff-brandt_off") ||
  24.         keywordURL.match("BRTH") ||
  25.         keywordURL.match(brandObject.askOriginCode)) {
  26.       gPrefBranch.clearUserPref("keyword.URL");
  27.     }
  28.   } catch (ex) {}
  29. }
  30. function firstRun (brandObject) {
  31.   function getVersionFromExtension(extfile) {
  32.     var zipReader = Cc["@mozilla.org/libjar/zip-reader;1"]
  33.                               .createInstance(Ci.nsIZipReader);
  34.     try {
  35.       zipReader.init(extfile);
  36.       zipReader.open();
  37.     } catch(ex) {
  38.       zipReader.open(extfile);
  39.     }
  40.     var tempfile = Cc["@mozilla.org/file/directory_service;1"]
  41.                              .getService(Ci.nsIProperties)
  42.                              .get("TmpD", Ci.nsIFile);
  43.     tempfile.append("install.rdf");
  44.     tempfile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0600);
  45.     zipReader.extract("install.rdf", tempfile);
  46.     zipReader.close();
  47.     var ioServ = Cc["@mozilla.org/network/io-service;1"]
  48.                            .getService(Ci.nsIIOService);
  49.     var fph = ioServ.getProtocolHandler("file")
  50.                     .QueryInterface(Ci.nsIFileProtocolHandler);
  51.  
  52.     var fileURL = fph.getURLSpecFromFile(tempfile);
  53.     var RDF = Cc["@mozilla.org/rdf/rdf-service;1"]
  54.                          .getService(Ci.nsIRDFService);
  55.     var InstallManifestRoot = RDF.GetResource("urn:mozilla:install-manifest");
  56.     var ds = RDF.GetDataSourceBlocking(fileURL);
  57.     var target = ds.GetTarget(InstallManifestRoot,
  58.                               RDF.GetResource("http://www.mozilla.org/2004/em-rdf#version"), true);
  59.     return target.QueryInterface(Ci.nsIRDFLiteral).Value;
  60.   }
  61.   function extensionEnabled(extensionID) {
  62.     var rdfs = Cc["@mozilla.org/rdf/rdf-service;1"]
  63.                          .getService(Ci.nsIRDFService);
  64.     var extensionDS= Cc["@mozilla.org/extensions/manager;1"]
  65.                                .getService(Ci.nsIExtensionManager).datasource;
  66.     var extension = rdfs.GetResource("urn:mozilla:item:" + extensionID);
  67.  
  68.     var arc = rdfs.GetResource("http://www.mozilla.org/2004/em-rdf#userDisabled");
  69.     var userDisabled = extensionDS.GetTarget(extension, arc, true);
  70.     if (userDisabled) {
  71.       userDisabled = userDisabled.QueryInterface(Ci.nsIRDFLiteral).Value;
  72.       return (userDisabled == false);
  73.     }
  74.     return true;
  75.   }
  76.   function extensionGetHomePage(extensionID) {
  77.     var rdfs = Cc["@mozilla.org/rdf/rdf-service;1"]
  78.                          .getService(Ci.nsIRDFService);
  79.     var extensionDS= Cc["@mozilla.org/extensions/manager;1"]
  80.                                .getService(Ci.nsIExtensionManager).datasource;
  81.     var extension = rdfs.GetResource("urn:mozilla:item:" + extensionID);
  82.  
  83.     var arc = rdfs.GetResource("http://www.mozilla.org/2004/em-rdf#homepageURL");
  84.     var homePage = extensionDS.GetTarget(extension, arc, true);
  85.     if (homePage) {
  86.       homePage = homePage.QueryInterface(Ci.nsIRDFLiteral).Value;
  87.       return homePage;
  88.     }
  89.     return "";
  90.   }
  91.  
  92.   var btClientPrefBranch;
  93.   if (brandObject.clientCode) {
  94.     btClientPrefBranch = Cc["@mozilla.org/preferences-service;1"]
  95.                                .getService(Ci.nsIPrefService)
  96.                                .getBranch("extensions.brandthunder." + brandObject.clientCode + ".");
  97.   } else {
  98.     btClientPrefBranch = Cc["@mozilla.org/preferences-service;1"]
  99.                                .getService(Ci.nsIPrefService)
  100.                                .getBranch("extensions.brandthunder." + brandObject.shortName + ".");
  101.   }
  102.  
  103.   var btPrefBranch = Cc["@mozilla.org/preferences-service;1"]
  104.                            .getService(Ci.nsIPrefService)
  105.                            .getBranch("extensions.brandthunder.");
  106.  
  107.  
  108.   var em = Cc["@mozilla.org/extensions/manager;1"]
  109.                      .getService(Ci.nsIExtensionManager);
  110.  
  111.   var newVersion = em.getItemForID(brandObject.extensionID).version;
  112.   var installedVersion;
  113.   try {
  114.     installedVersion = btClientPrefBranch.getCharPref("installedVersion");
  115.   } catch (ex) {
  116.     installedVersion = "0";
  117.   }
  118.   btClientPrefBranch.setCharPref("installedVersion", newVersion);
  119.  
  120.   var firstrun = true;
  121.   try{
  122.     firstrun = btClientPrefBranch.getBoolPref("firstrun");
  123.     if (firstrun == false) {
  124.       /* Ignore firstrun pref if we aren't a Boom */
  125.       try {
  126.         btPrefBranch.getCharPref("currentBoom");
  127.         var versionChecker = Cc["@mozilla.org/xpcom/version-comparator;1"]
  128.                                        .getService(Ci.nsIVersionComparator);
  129.         /* if new version > curversion */
  130.         if (versionChecker.compare(newVersion, installedVersion) > 0) {
  131.           btClientPrefBranch.setBoolPref("upgrade", true);
  132.           /* Handle surf canyon upgrade */
  133.           try {
  134.             var partner_code = gPrefBranch.getCharPref("surfcanyon.partner_code");
  135.             if (partner_code == "BT") {
  136.               var sub_partner_code = gPrefBranch.getCharPref("surfcanyon.sub_partner_code");
  137.               if (sub_partner_code == brandObject.shortName) {
  138.                 gPrefBranch.setBoolPref("surfcanyon.added_to_searchbar", true);
  139.               }
  140.             }
  141.           } catch (ex) {}
  142.           /* If the user hasn't explicitly set it to false, set it to true */
  143.           /* This is to handle the upgrade case */
  144.           if (!btPrefBranch.prefHasUserValue("tabSearch")) {
  145.             btPrefBranch.setBoolPref("tabSearch", true);
  146.           }
  147.           if (!btPrefBranch.prefHasUserValue("keywordSearch")) {
  148.             btPrefBranch.setBoolPref("keywordSearch", true);
  149.           }
  150.         }
  151.         return;
  152.       } catch (ex) {
  153.         /* If currentBoom wasn't set, this is a first run from a toolbar, not a boom */
  154.         /* Set the pref so we go through this code, but not the front end first run */
  155.         btClientPrefBranch.setBoolPref("firstrun", false);
  156.         /* If we are moving from toolbar to boom, always an upgrade */
  157.         btClientPrefBranch.setBoolPref("upgrade", true);
  158.       }
  159.     }
  160.   } catch(e) {
  161.   //nothing
  162.   }
  163.  
  164.   /* Default to false - we'll set them to true on either optin */
  165.   /* or first run */
  166.   if (!btPrefBranch.prefHasUserValue("tabSearch")) {
  167.     btPrefBranch.setBoolPref("tabSearch", false);
  168.   }
  169.   if (!btPrefBranch.prefHasUserValue("keywordSearch")) {
  170.     btPrefBranch.setBoolPref("keywordSearch", false);
  171.   }
  172.  
  173.  
  174. /* Surf Canyon pref setting code */
  175.  
  176.   try {
  177.     var partner_code = gPrefBranch.getCharPref("surfcanyon.partner_code");
  178.     if (partner_code == "BT") {
  179.       var sub_partner_code = gPrefBranch.getCharPref("surfcanyon.sub_partner_code");
  180.       if (sub_partner_code == brandObject.shortName) {
  181.         gPrefBranch.setBoolPref("surfcanyon.added_to_searchbar", true);
  182.       }
  183.     }
  184.   } catch (ex) {}
  185.  
  186.   /* For first run, set the theme to classic,
  187.      set the currentBoom, and set big boom */
  188.   
  189.   gPrefBranch.setCharPref("general.skins.selectedSkin", "classic/1.0");
  190.  
  191.   var initialBoom;
  192.  
  193.   var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"]
  194.                                 .getService(Components.interfaces.nsICookieManager);
  195.  
  196.   var e = cookieManager.enumerator;
  197.   while (e.hasMoreElements()) {
  198.     var cookie = e.getNext();
  199.     if (cookie && cookie instanceof Components.interfaces.nsICookie) {
  200.       if (cookie.name == brandObject.shortName) {
  201.         if (brandObject.booms[cookie.value]) {
  202.           initialBoom = cookie.value;
  203.           cookieManager.remove(cookie.domain, cookie.name, cookie.path, false);
  204.           break;
  205.         }
  206.       }
  207.     }
  208.   }
  209.  
  210.   if (!initialBoom) {
  211.     for (let i in brandObject.booms) {
  212.       initialBoom = i;
  213.       break; 
  214.     }
  215.   }
  216.  
  217.   btPrefBranch.setCharPref("currentBoom", initialBoom);
  218.  
  219.  
  220.   btPrefBranch.setBoolPref("bigBoom", true);
  221.  
  222.   var em = Cc["@mozilla.org/extensions/manager;1"]
  223.                      .getService(Ci.nsIExtensionManager);
  224.   
  225.   /* Before we do anything, uninstall old CCK */
  226.   /* Set a pref which indicates we are upgrading from an old version */
  227.   if (brandObject.cckID) {
  228.     if (em.getInstallLocation(brandObject.cckID)) {
  229.       em.uninstallItem(brandObject.cckID);
  230.     }
  231.   }
  232.  
  233.   /* If we have a themeID, uninstall the old theme */
  234.   if (brandObject.themeID) {
  235.     if (em.getInstallLocation(brandObject.themeID)) {
  236.       em.uninstallItem(brandObject.themeID);
  237.     }
  238.   }
  239.  
  240.   /* Disable any other brand thunder extensions by enumerating through */
  241.   /* all extensions and looking for http://brandthunder.com */
  242.   /* ugly I know */
  243.   var items = em.getItemList(Ci.nsIUpdateItem.TYPE_EXTENSION, {});
  244.  
  245.   for (var i = 0; i < items.length; i++) {
  246.     if (items[i].id != brandObject.extensionID) {
  247.       if (extensionEnabled(items[i].id)) {
  248.         if (extensionGetHomePage(items[i].id).match("brandthunder.com") &&
  249.             (!extensionGetHomePage(items[i].id).match("boom"))) {
  250.           em.disableItem(items[i].id);
  251.         }
  252.       }
  253.     }
  254.   }
  255. }
  256.  
  257. function installXPIs(brandObject) {
  258.   var btClientPrefBranch;
  259.   if (brandObject.clientCode) {
  260.     btClientPrefBranch = Cc["@mozilla.org/preferences-service;1"]
  261.                                .getService(Ci.nsIPrefService)
  262.                                .getBranch("extensions.brandthunder." + brandObject.clientCode + ".");
  263.   } else {
  264.     btClientPrefBranch = Cc["@mozilla.org/preferences-service;1"]
  265.                                .getService(Ci.nsIPrefService)
  266.                                .getBranch("extensions.brandthunder." + brandObject.shortName + ".");
  267.   }
  268.  
  269.   /* Don't install any XPIs on an upgrade */
  270.   /* We'll set a pref and install them if there is opt in */
  271.   var upgrade = false;
  272.   try {
  273.     upgrade = btClientPrefBranch.getBoolPref("upgrade");
  274.     if (upgrade) { 
  275.       return;
  276.     }
  277.   } catch (ex) {}
  278.  
  279.   var items_installed = false;
  280.   var em = Cc["@mozilla.org/extensions/manager;1"]
  281.                      .getService(Ci.nsIExtensionManager);
  282.  
  283.   try {
  284.     var extdir = em.getInstallLocation(brandObject.extensionID)
  285.                      .getItemLocation(brandObject.extensionID);
  286.   } catch (ex) {
  287.     return;
  288.   }
  289.  
  290.   var e = extdir.directoryEntries;
  291.   while (e.hasMoreElements()) {
  292.     var f = e.getNext().QueryInterface(Components.interfaces.nsIFile);
  293.     var splitpath = f.path.split(".");
  294.     /* Only load XPI files */
  295.     if (splitpath[splitpath.length-1] == "xpi") {
  296.       var zipReader = Cc["@mozilla.org/libjar/zip-reader;1"]
  297.                                 .createInstance(Ci.nsIZipReader);
  298.       try {
  299.         zipReader.init(f);
  300.         zipReader.open();
  301.       } catch(ex) {
  302.         zipReader.open(f);
  303.       }
  304.       var tempfile = Cc["@mozilla.org/file/directory_service;1"]
  305.                                .getService(Ci.nsIProperties)
  306.                                .get("TmpD", Ci.nsIFile);
  307.       tempfile.append("install.rdf");
  308.       tempfile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0600);
  309.       zipReader.extract("install.rdf", tempfile);
  310.       zipReader.close();
  311.       var ioServ = Cc["@mozilla.org/network/io-service;1"]
  312.                              .getService(Ci.nsIIOService);
  313.       var fph = ioServ.getProtocolHandler("file")
  314.                       .QueryInterface(Ci.nsIFileProtocolHandler);
  315.     
  316.       var fileURL = fph.getURLSpecFromFile(tempfile);
  317.       var RDF = Cc["@mozilla.org/rdf/rdf-service;1"]
  318.                            .getService(Ci.nsIRDFService);
  319.       var InstallManifestRoot = RDF.GetResource("urn:mozilla:install-manifest");
  320.       var ds = RDF.GetDataSourceBlocking(fileURL);
  321.       var target = ds.GetTarget(InstallManifestRoot,
  322.                                 RDF.GetResource("http://www.mozilla.org/2004/em-rdf#version"), true);
  323.       var newVersion = target.QueryInterface(Ci.nsIRDFLiteral).Value;
  324.       var target = ds.GetTarget(InstallManifestRoot,
  325.                                 RDF.GetResource("http://www.mozilla.org/2004/em-rdf#id"), true);
  326.       var id = target.QueryInterface(Ci.nsIRDFLiteral).Value;
  327.       /* check to see if ID is already installed */
  328.       var item = em.getItemForID(id);
  329.       if (item) {
  330.         var curVersion = item.version;
  331.         var versionChecker = Cc["@mozilla.org/xpcom/version-comparator;1"]
  332.                                        .getService(Ci.nsIVersionComparator);
  333.         /* if new version > curversion */
  334.         if (versionChecker.compare(newVersion, curVersion) > 0) {
  335.           em.installItemFromFile(f, "app-profile");
  336.           items_installed = true;
  337.         }
  338.       } else {
  339.         em.installItemFromFile(f, "app-profile");
  340.         items_installed = true;
  341.       }
  342.       try {
  343.         f.remove(true);
  344.       } catch (ex) {
  345.         /* Ignore error - it's already gone */
  346.         /* This happens on FF2 in some cases for some reason */
  347.       }
  348.     }
  349.   }
  350.   if (items_installed) {
  351.     var nsIAppStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"]
  352.                                   .getService(Components.interfaces.nsIAppStartup);
  353.     nsIAppStartup.quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit);    
  354.  
  355.   }
  356. }
  357.